home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 60 / IOPROG_60.ISO / soft / c++ / gsl-1.1.1-setup.exe / {app} / src / permutation / init.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-06-05  |  2.1 KB  |  99 lines

  1. /* permutation/init.c
  2.  * 
  3.  * Copyright (C) 1996, 1997, 1998, 1999, 2000 Brian Gough
  4.  * 
  5.  * This program is free software; you can redistribute it and/or modify
  6.  * it under the terms of the GNU General Public License as published by
  7.  * the Free Software Foundation; either version 2 of the License, or (at
  8.  * your option) any later version.
  9.  * 
  10.  * This program is distributed in the hope that it will be useful, but
  11.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  * General Public License for more details.
  14.  * 
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  */
  19.  
  20. #include <config.h>
  21. #include <stdlib.h>
  22. #include <gsl/gsl_errno.h>
  23. #include <gsl/gsl_permutation.h>
  24.  
  25. gsl_permutation *
  26. gsl_permutation_alloc (const size_t n)
  27. {
  28.   gsl_permutation * p;
  29.  
  30.   if (n == 0)
  31.     {
  32.       GSL_ERROR_VAL ("permutation length n must be positive integer",
  33.             GSL_EDOM, 0);
  34.     }
  35.  
  36.   p = (gsl_permutation *) malloc (sizeof (gsl_permutation));
  37.  
  38.   if (p == 0)
  39.     {
  40.       GSL_ERROR_VAL ("failed to allocate space for permutation struct",
  41.             GSL_ENOMEM, 0);
  42.     }
  43.  
  44.   p->data = (size_t *) malloc (n * sizeof (size_t));
  45.  
  46.   if (p->data == 0)
  47.     {
  48.       free (p);        /* exception in constructor, avoid memory leak */
  49.  
  50.       GSL_ERROR_VAL ("failed to allocate space for permutation data",
  51.             GSL_ENOMEM, 0);
  52.     }
  53.  
  54.   p->size = n;
  55.  
  56.   return p;
  57. }
  58.  
  59. gsl_permutation *
  60. gsl_permutation_calloc (const size_t n)
  61. {
  62.   size_t i;
  63.  
  64.   gsl_permutation * p =  gsl_permutation_alloc (n);
  65.  
  66.   if (p == 0)
  67.     return 0;
  68.  
  69.   /* initialize permutation to identity */
  70.  
  71.   for (i = 0; i < n; i++)
  72.     {
  73.       p->data[i] = i;
  74.     }
  75.  
  76.   return p;
  77. }
  78.  
  79. void
  80. gsl_permutation_init (gsl_permutation * p)
  81. {
  82.   const size_t n = p->size ;
  83.   size_t i;
  84.  
  85.   /* initialize permutation to identity */
  86.  
  87.   for (i = 0; i < n; i++)
  88.     {
  89.       p->data[i] = i;
  90.     }
  91. }
  92.  
  93. void
  94. gsl_permutation_free (gsl_permutation * p)
  95. {
  96.   free (p->data);
  97.   free (p);
  98. }
  99.